package com.binary.coder.gift.core.domain.invitation.repository;

import com.binary.coder.gift.core.common.bean.PageBean;
import com.binary.coder.gift.core.domain.invitation.model.aggregate.HandleInvitationRecordAggregate;
import com.binary.coder.gift.core.domain.invitation.model.aggregate.InvitationCardAggregate;
import com.binary.coder.gift.core.domain.invitation.model.entity.InvitationEntrustEntity;
import com.binary.coder.gift.core.domain.invitation.model.entity.InvitationRecordEntity;
import com.binary.coder.gift.core.interfaces.Invitation.dto.req.PageQueryInvitationCardReq;
import com.binary.coder.gift.core.interfaces.Invitation.dto.req.PageQueryInvitationEntrustReq;
import com.binary.coder.gift.core.interfaces.Invitation.dto.res.QueryInvitationEntrustRes;

/**
 * @author atao
 * @version 1.0.0
 * @ClassName InvitationRepository.java
 * @Description Invitation仓储接口
 * @createTime 2024年06月21日 16:55:00
 */
public interface InvitationRepository {

    Long saveOrUpdateInvitation(InvitationCardAggregate invitationCardAggregate);

    void deleteInvitationCardById(Long invitationCardId);

    PageBean<InvitationCardAggregate> pageQueryInvitationCard(PageQueryInvitationCardReq req);

    void saveInvitationRecord(InvitationRecordEntity entity);

    InvitationCardAggregate queryInvitationCard(Long invitationCardId);

    HandleInvitationRecordAggregate queryInvitationRecord(Long userId, Long invitationCardId);

    PageBean<HandleInvitationRecordAggregate> pageQueryInvitationRecord(long pageIndex, long pageIndex1, Long invitationId);

    void saveInvitationEntrust(InvitationEntrustEntity invitationEntrustEntity);

    PageBean<QueryInvitationEntrustRes> pageQueryInvitationEntrust(PageQueryInvitationEntrustReq req);
}
